package com.jyw.business.obstacles.mapper;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jyw.business.obstacles.domain.ObsOrderInfo;
import com.jyw.business.obstacles.domain.dto.web.CallRecordPageDto;
import com.jyw.business.obstacles.domain.dto.wechat.WxCallRecordPageDto;
import com.jyw.business.obstacles.domain.vo.web.*;
import com.jyw.business.obstacles.domain.vo.wechat.WxCallRecordPageVO;
import com.jyw.business.obstacles.domain.vo.wechat.WxOrderDailyDetailVO;
import com.jyw.business.obstacles.domain.vo.wechat.WxWorkOrderInfoVO;
import com.jyw.system.domain.dto.BaseTimeDto;
import org.apache.ibatis.annotations.Param;

/**
 * 工单基本信息Mapper接口
 *
 * @author system
 * @date 2023-08-10
 */
public interface ObsOrderInfoMapper extends BaseMapper<ObsOrderInfo> {
    /**
     * 查询工单基本信息
     *
     * @param id 工单基本信息主键
     * @return 工单基本信息
     */
    public ObsOrderInfo selectObsOrderInfoById(Long id);

    /**
     * 查询工单基本信息列表
     *
     * @param obsOrderInfo 工单基本信息
     * @return 工单基本信息集合
     */
    public List<ObsOrderInfo> selectObsOrderInfoList(ObsOrderInfo obsOrderInfo);

    /**
     * 新增工单基本信息
     *
     * @param obsOrderInfo 工单基本信息
     * @return 结果
     */
    public int insertObsOrderInfo(ObsOrderInfo obsOrderInfo);

    /**
     * 修改工单基本信息
     *
     * @param obsOrderInfo 工单基本信息
     * @return 结果
     */
    public int updateObsOrderInfo(ObsOrderInfo obsOrderInfo);

    /**
     * 删除工单基本信息
     *
     * @param id 工单基本信息主键
     * @return 结果
     */
    public int deleteObsOrderInfoById(Long id);

    /**
     * 批量删除工单基本信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteObsOrderInfoByIds(Long[] ids);

    /**
     * 查询最大的工单号
     *
     * @return
     */
    Long selectMaxOrderNum();

    /**
     * 查询通话记录
     *
     * @param callRecordPageDto
     * @return
     */
    List<CallRecordPageVO> selectRecordList(@Param("filter") CallRecordPageDto callRecordPageDto);

    /**
     * 微信查询通话记录
     *
     * @param wxCallRecordPageDto
     * @return
     */
    List<WxCallRecordPageVO> selectWxRecordList(@Param("filter") WxCallRecordPageDto wxCallRecordPageDto);

    /**
     * 微信查询报修信息
     *
     * @param orderNum
     * @return
     */
    WxWorkOrderInfoVO findByOrderNum(String orderNum);

    /**
     * 我的服务台
     * @param baseTimeDto
     * @param userId
     * @return
     */
    List<HomeMineServerVO> mineServer(@Param("date") BaseTimeDto baseTimeDto, @Param("userId") Long userId);

    /**
     * 我的工单总数
     * @param baseTimeDto
     * @param userId
     * @return
     */
    Integer mineOrderTotal(@Param("date")BaseTimeDto baseTimeDto, @Param("userId")Long userId);

    /**
     * 我的工单
     * @param baseTimeDto
     * @param userId
     * @return
     */
    List<HomeMineOrderVO> mineOrder(@Param("date")BaseTimeDto baseTimeDto, @Param("userId")Long userId);

    /**
     * 首页 待处理报修
     * @return
     */
    Integer todoRepair(@Param("userId") Long userId);

    /**
     * 首页 待处理报修
     * @param userId
     * @return  工单号集合
     */
    List<String> getOrderNumberByTodoRepair(@Param("userId") Long userId,@Param("type") Integer type);

    /**
     * 首页 待处理工单
     * @param userId
     * @return
     */
    Integer todoOrder(@Param("userId") Long userId);

    /**
     * 待处理工单
     * @param userId
     * @return 工单号集合
     */
    List<String> getOrderNumberByTodoOrder(@Param("userId") Long userId);

    /**
     * 首页 报修来源统计
     * @param type
     * @param beginDate
     * @param endDate
     * @return
     */
    List<HomeOrderSourceVO> homeOrderSource(@Param("type") String type, @Param("beginDate")Date beginDate, @Param("endDate")Date endDate);

    /**
     * 首页 报修来源统计(总数)
     * @param beginDate
     * @param endDate
     * @return
     */
    Integer homeOrderSourceTotal(@Param("beginDate")Date beginDate, @Param("endDate")Date endDate);

    /**
     * 首页 报修故障分类排名
     * @param baseTimeDto
     * @return
     */
    List<HomeOrderFaultRankVO> orderFaultRank(@Param("date") BaseTimeDto baseTimeDto);

    /**
     * 首页 工程师接单数排名
     * @param baseTimeDto
     * @return
     */
    List<UserOrderRankVO> orderUserRank(@Param("date")BaseTimeDto baseTimeDto);

    /**
     * 首页 工单告警信息
     * @param dto
     * @param count
     * @return
     */
    List<HomeOrderWarningVO> orderWarning(@Param("date") BaseTimeDto dto,@Param("count") Integer count);

    /**
     * 首页 我的工单数
     * @param userId
     * @return
     */
    Integer mineOrderNum(@Param("userId") Long userId);

    /**
     * 首页 日报详情
     * @param dto
     * @return
     */
    List<WxOrderDailyDetailVO> dailyDetail(@Param("date")BaseTimeDto dto);
}
